home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / vmalloc.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  3.2 KB  |  107 lines

  1. #ifndef _LINUX_VMALLOC_H
  2. #define _LINUX_VMALLOC_H
  3.  
  4. #include <linux/spinlock.h>
  5. #include <linux/init.h>
  6. #include <asm/page.h>        /* pgprot_t */
  7.  
  8. struct vm_area_struct;        /* vma defining user mapping in mm_types.h */
  9.  
  10. /* bits in flags of vmalloc's vm_struct below */
  11. #define VM_IOREMAP    0x00000001    /* ioremap() and friends */
  12. #define VM_ALLOC    0x00000002    /* vmalloc() */
  13. #define VM_MAP        0x00000004    /* vmap()ed pages */
  14. #define VM_USERMAP    0x00000008    /* suitable for remap_vmalloc_range */
  15. #define VM_VPAGES    0x00000010    /* buffer for pages was vmalloc'ed */
  16. /* bits [20..32] reserved for arch specific ioremap internals */
  17.  
  18. /*
  19.  * Maximum alignment for ioremap() regions.
  20.  * Can be overriden by arch-specific value.
  21.  */
  22. #ifndef IOREMAP_MAX_ORDER
  23. #define IOREMAP_MAX_ORDER    (7 + PAGE_SHIFT)    /* 128 pages */
  24. #endif
  25.  
  26. struct vm_struct {
  27.     struct vm_struct    *next;
  28.     void            *addr;
  29.     unsigned long        size;
  30.     unsigned long        flags;
  31.     struct page        **pages;
  32.     unsigned int        nr_pages;
  33.     unsigned long        phys_addr;
  34.     void            *caller;
  35. };
  36.  
  37. /*
  38.  *    Highlevel APIs for driver use
  39.  */
  40. extern void vm_unmap_ram(const void *mem, unsigned int count);
  41. extern void *vm_map_ram(struct page **pages, unsigned int count,
  42.                 int node, pgprot_t prot);
  43. extern void vm_unmap_aliases(void);
  44.  
  45. #ifdef CONFIG_MMU
  46. extern void __init vmalloc_init(void);
  47. #else
  48. static inline void vmalloc_init(void)
  49. {
  50. }
  51. #endif
  52.  
  53. extern void *vmalloc(unsigned long size);
  54. extern void *vmalloc_user(unsigned long size);
  55. extern void *vmalloc_node(unsigned long size, int node);
  56. extern void *vmalloc_exec(unsigned long size);
  57. extern void *vmalloc_32(unsigned long size);
  58. extern void *vmalloc_32_user(unsigned long size);
  59. extern void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot);
  60. extern void *__vmalloc_area(struct vm_struct *area, gfp_t gfp_mask,
  61.                 pgprot_t prot);
  62. extern void vfree(const void *addr);
  63.  
  64. extern void *vmap(struct page **pages, unsigned int count,
  65.             unsigned long flags, pgprot_t prot);
  66. extern void vunmap(const void *addr);
  67.  
  68. extern int remap_vmalloc_range(struct vm_area_struct *vma, void *addr,
  69.                             unsigned long pgoff);
  70. void vmalloc_sync_all(void);
  71.  
  72. /*
  73.  *    Lowlevel-APIs (not for driver use!)
  74.  */
  75.  
  76. static inline size_t get_vm_area_size(const struct vm_struct *area)
  77. {
  78.     /* return actual size without guard page */
  79.     return area->size - PAGE_SIZE;
  80. }
  81.  
  82. extern struct vm_struct *get_vm_area(unsigned long size, unsigned long flags);
  83. extern struct vm_struct *get_vm_area_caller(unsigned long size,
  84.                     unsigned long flags, void *caller);
  85. extern struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags,
  86.                     unsigned long start, unsigned long end);
  87. extern struct vm_struct *get_vm_area_node(unsigned long size,
  88.                       unsigned long flags, int node,
  89.                       gfp_t gfp_mask);
  90. extern struct vm_struct *remove_vm_area(const void *addr);
  91.  
  92. extern int map_vm_area(struct vm_struct *area, pgprot_t prot,
  93.             struct page ***pages);
  94. extern void unmap_kernel_range(unsigned long addr, unsigned long size);
  95.  
  96. /* Allocate/destroy a 'vmalloc' VM area. */
  97. extern struct vm_struct *alloc_vm_area(size_t size);
  98. extern void free_vm_area(struct vm_struct *area);
  99.  
  100. /*
  101.  *    Internals.  Dont't use..
  102.  */
  103. extern rwlock_t vmlist_lock;
  104. extern struct vm_struct *vmlist;
  105.  
  106. #endif /* _LINUX_VMALLOC_H */
  107.